SOPEN

            
#include <fentl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <sharc.h>
#include <io.h>        требуется только для объявления функции
int sopen(pathname,oflag,shflag{,pmode]);
char *pathname;        path-имя  файла
int oflag;             тип разрешенных операций
int shflag;            разрешенный тип разделения
int pmode;             разрешенный тип доступа

Описание.
Функция sopen открывает файл, заданный по path -имени, и подготавливает его к последующему разделенному чтению или записи, что определяется значением oflag или shflag . Oflag является целым выражением, состоящим из комбинации одной или нескольких следующих манифестных констант, объявленных в <fcntl.h> . Когда задана более чем одна манифестная константа, тогда они объединяются при помощи оператора ИЛИ(:).

            OFLAG                          ЗНАЧЕНИЕ
                            
            O_APPEND        Перед   каждой    операцией     записи
                            перемещает указатеь  на  файл  в конец
                            файла.
                            
            O_CREAT         Новый файл создан и открыт для записи;
                            это  не  эффективно,  если  существует
                            файл, определяемый по path-имени.
                            
            O_EXCL          Возвращается  значение  ошибки,   если
                            существует файл, определяемый по path-
                            имени. Используется вместе с O_CREATE.

            O_RDONLY        Файл  открыт  только  для чтения, если
                            задан этот флаг, также может быть  вы-
                            бран флаг O_RDWR или O_WRONLY.
                            
            O_RDWR          Файл открыт одновременно для чтения  и
                            записи; если  задается  этот  флаг, то
                            может быть выбран флаг  O_RDONLY   или
                            O_WRONLY.
                            
            O_TRUNC         Существующий  файл  открыт  и усечен к
                            длине 0; этот файл должен иметь разре-
                            шение  на  запись.   Содержимое  файла
                            уничтожается.
           
            O_WRONLY        Файл  открыт  только  для чтения; если
                            задан этот  флаг,  должен  быть  задан
                            флаг O_RDONLY или O_RDWR.
                            
            O_BINARY        Файл открыт в двоичном  (не транслиро-
                            ванном) режиме.  (См. описание  двоич-
                            ного режима у функции  fopen).
                            
            O_TEXT          Файл открыт в текстовом (транслирован-
                            ном) режиме.   (См.  описание  тексто-
                            вого режима у функции fopen).

Замечание:
O_TRUNC полностью уничтожает содержимое существующего файла, поэтому нужно внимательно использовать эту константу.
Аргумент shflag является константным выражением, состоящим из следующих манифестных констант, объявленных в <share.h> . Подробно информация о режиме разделения приведена в руководстве по MS DOS.

            shflag                          Значение
            
           SH_COMPAT        устанавливается режим совместимости
            
           SH_DENYRW        доступ по чтению  и записи в файле  не
                            разрешен
      
           SH_DENYWR        доступ по записи в файле не разрешен
            
           SH_DENYRD        доступ по чтению в файле не разрешен
            
           SH_DENYNO        доступ по чтению и записи разрешен

Аргумент pmode требуется только тогда, когда определена константа 0_CREAT . Если файл не существует, pmode также определяет типы доступа для файла, которые устанавливаются во время первого закрытия нового файла. В противном случае аргумент pmode игнорируется. Аргумент pmode является целым выражением, содержащим одну или больше манифестных констант S_IWRITE и S_IREAD , объявленных в <sys\stat.h> . Когда задаются обе константы, они объединяются оператором ИЛИ(!). Значение аргумента pmode приведено ниже.

            КОНСТАНТА            ЕЕ СМЫСЛОВОЕ ЗНАЧЕНИЕ
            
            S_IWRITE             разрешает запись
            
            S_IREAD              разрешает чтение

            S_IREAD:S_IWRITE     разрешают чтение и запись

Если запись не разрешена, файл предназначен только для чтения. В MS DOS все файлы открыты для чтения, разрешение по записи не задается. Поэтому модели S_IWRITE и S_IREAD : S_IWRITE являются эквивалентными.
Перед установкой разрешения функция sopen прикладывает текущую маску файла к pmode (см. umask ).

Возвращаемое значение.
Функция sopen возвращает handle -р на открытый файл. Возвращаемое значение -1 указывает на ошибку; errno устанавливается в одно из следующих значений:

            ЗНАЧЕНИЕ                ЕГО СМЫСЛ
      
            EACCES         Заданное path-имя является директорием
                           или сделана попытка  записать  в  файл,
                           открытый   только   для   чтения,   или
                           возникло нарушение в режиме разделения.
                           (Версии MS DOS 3.0 и старше).
            
            EINVAL         Командный файл SHARE.COM не инстоллиро-
                           ван.
            
            EEXIST         Флаги O_CREAT и O_EXCL  определены,  но
                           названный файл всегда существует.
                           
            EMFILE         Другие handle-ры  файла  не   доступны,
                           т.к. много открытых файлов.
                           
            ENOENT         Файл или path-имя не найдено.

Замечание:
Функция sopen используется в версиях 3.0 MS DOS и старших. В ранних версиях MS DOS аргумент shflag игнорируется.
Режимы разделения файлов работают неверно с буферизованными файлами, поэтому fdopen не используется для связи потока и файла, открытого к разделению или закрытию.

Пример:

            #include <fcntl.h>
            #include<sys\types.h>
            #include<sys\stat.h>
            #include<share.h>
            #include<io.h>
            
            extern unsigned char _osmajor;
            int fh;
            
                
               /* Перед вызовом sopen используется переменная _osmajor для
         проверки номера версии MS DOS . */.
           
            if (_osmajor >=3)
               fh = sopen ("data", O_RDWR:O_BINARY, SH_DENYRW);
            
            else
               fh = open ("data", O_RDWR: O_BINARY);

Hosted by uCoz